package com.peg.dataobjects;

import java.util.ArrayList;

/**
 * @author sad
 */
public class ValueStack {

    private ArrayList _values;

    ValueStack() {
        _values = new ArrayList(50);
    }

    public Object Pop() {
        Object value = _values.get(_values.size() - 1);
        _values.remove(_values.size() - 1);
        return value;
    }

    public Object Pop(int pos) {
        Object value = _values.get(_values.size() - 1 - pos);
        _values.remove(_values.size() - 1 - pos);
        return value;
    }

    /// <summary>
    /// Search String in stack with specified prefix
    /// </summary>
    public String PopStringWithThePrefix(String prefix) {
        for (int i = _values.size() - 1; i >= 0; i--) {
            Object value = _values.get(i);
            if (!(value instanceof String)) {
                continue;
            }
            String str = (String) value;
            if (str.startsWith(prefix)) {
                _values.remove(i);
                return str.substring(prefix.length());
            }
        }

        return null;
    }

    public int Count() {
        return _values.size();
    }

    public Object Peek() {
        return _values.get(_values.size() - 1);
    }

    public Object Peek(int index) {
        return _values.get(_values.size() - 1 - index);
    }

    public Object Push(Object value) {
        _values.add(value);
        return value;
    }

    public ValueStack Clone() {
        ValueStack stack = new ValueStack();
        ArrayList newValues = new ArrayList(_values.size() + 10);
        newValues.addAll(_values);
        stack._values = newValues;
        return stack;
    }
}
